home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_03_02 / 3n02006a < prev    next >
Text File  |  1991-12-13  |  971b  |  43 lines

  1. // simple.c - simple chunk allocator 
  2.  
  3. #include <stdlib.h>
  4.  
  5. class   Simple
  6.     {
  7. public:
  8.     Simple  *Next;
  9.     int     SomeData;
  10.     void    *operator new(size_t);
  11.     void    operator delete(void *, size_t);
  12. private:
  13.     enum    {PERCHUNK = 128};
  14.     static Simple *FreeList;
  15.     };
  16.  
  17. void *Simple::operator new(size_t Size)
  18.     {
  19.     Simple  *Free   = FreeList;
  20.     if(Free)
  21.         FreeList    = FreeList->Next;
  22.     else
  23.         {
  24.         Free = (Simple *)new char[PERCHUNK*sizeof(Simple)];
  25.         FreeList    = Free;
  26.         for(int i = 1; i < PERCHUNK; ++i)
  27.             {
  28.             Free->Next  = Free + 1;
  29.             ++Free;
  30.             }
  31.         Free->Next  = 0;    // NULL terminator
  32.         Free        = FreeList;
  33.         }
  34.     return Free;
  35.     }
  36.  
  37. void    Simple::operator delete(void *Pointer, size_t)
  38.     {
  39.     Simple  *This   = (Simple *)Pointer;
  40.     This->Next      = FreeList;
  41.     FreeList        = This;
  42.     }
  43.